
/*
    Software License

    Copyright (C) 2021-05-24  Xoronos

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, version 3.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/

/*
    Liabilities

    The software is provided "AS IS" without any warranty of any kind, either expressed,
    implied, or statutory, including, but not limited to, any warranty that the software
    will conform to specifications, any implied warranties of merchantability, fitness
    for a particular purpose, and freedom from infringement, and any warranty that the
    documentation will conform to the software, or any warranty that the software will
    be error free.

    In no event shall Xoronos be liable for any damages, including, but not limited to,
    direct, indirect, special or consequential damages, arising out of, resulting from,
    or in any way connected with this software, whether or not based upon warranty,
    contract, tort, or otherwise, whether or not injury was sustained by persons or
    property or otherwise, and whether or not loss was sustained from, or arose out of
    the results of, or use of, the software or services provided hereunder.

    To request the provided software under a different license you can contact us at
    support@xoronos.com
*/

#ifndef XLEXEXAMPLE_H
#define XLEXEXAMPLE_H

#include <stdio.h>
#include "lexcheck.h"
#include "lexexample_backend.h"
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define LEXER_EXAMPLES_DUMP_DIR "~/.local/xoronos/cache/"

void lex_example_decoding_conf( int rnd, int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_encoding_conf( int rnd, int force_encoding_param_with_no_password, int dump_encoding_param,
                                char *all_args[]
 );
void lex_example_logging_conf( int rnd, int response, int neutral_standard_alice_bob, char *all_args[]
 );
void lexexamples_all( int command, int rnd, char *all_args[]
 );
void lex_print_general_structure( char *all_args[]
 );
void lex_print_suggestions( int current_command, char *all_args[]
 );

void lex_example_dump_encoding_param( int rnd, int arch, int force_perm,
                                      int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_decode_encode( int rnd, int arch, int force_perm,
                                int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_mine_xmatrix_comp_rand( int rnd, int arch, int force_perm, int force_pseudo_random,
                                         int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_mine_xmatrix_comp_ot( int rnd, int arch, int force_perm, int force_pseudo_random,
                                       int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_permute_xmatrix_comp_random( int rnd, int arch, int force_perm,
                                              int force_encoding_param_with_no_password,
                                              int neutral_personality, char *all_args[]
 );
void lex_example_permute_xmatrix_comp_deterministic( int rnd, int arch, int force_perm,
                                                     int force_encoding_param_with_no_password,
                                                     int neutral_personality, char *all_args[]
 );
void lex_example_permute_xmatrix_comp_confidential( int rnd, int arch, int force_perm,
                                                    int force_encoding_param_with_no_password,
                                                    int neutral_personality, char *all_args[]
 );
void lex_example_decompress_xmatrix( int rnd, int arch, int force_perm,
                                     int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_xmatrix_comp( int rnd, int arch, int force_perm,
                                     int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_xmatrix( int rnd, int arch, int force_perm, int force_encoding_param_with_no_password,
                                char *all_args[]
 );
void lex_example_make_point( int rnd, int arch, int force_perm, int force_encoding_param_with_no_password,
                             char *all_args[]
 );
void lex_example_make_confidential_pseudo_random_number( int rnd, int arch, int force_perm,
                                                         int force_encoding_param_with_no_password,
                                                         char *all_args[]
 );
void lex_example_make_start_point( int rnd, int arch, int force_perm,
                                   int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_monomial_key( int rnd, int arch, int force_perm,
                                    int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_binomial_key( int rnd, int arch, int force_perm,
                                    int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_exchange_monomial_key( int rnd, int arch, int force_perm,
                                        int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_monovalent_key( int rnd, int arch, int force_perm,
                                      int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_exchange_polyvalent_key( int rnd, int arch, int force_perm,
                                          int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_monovalent_key( int rnd, int arch, int force_perm,
                                       int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_commitment_binomial_key( int rnd, int arch, int force_perm,
                                               int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_commitment_sym_signature( int rnd, int arch, int force_perm,
                                                int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_commitment_sym_certificate( int rnd, int arch, int force_perm,
                                                  int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_response( int rnd, int arch, int force_perm, int force_encoding_param_with_no_password,
                                char *all_args[]
 );
void lex_example_make_monomial_proof( int rnd, int arch, int force_perm,
                                      int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_monomial_proof_sym_signature( int rnd, int arch, int force_perm,
                                                    int force_encoding_param_with_no_password,
                                                    char *all_args[]
 );
void lex_example_make_monomial_proof_sym_certificate( int rnd, int arch, int force_perm,
                                                      int force_encoding_param_with_no_password,
                                                      char *all_args[]
 );
void lex_example_check_monovalent_proof( int rnd, int arch, int force_perm,
                                         int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_monovalent_proof_sym_signature( int rnd, int arch, int force_perm,
                                                       int force_encoding_param_with_no_password,
                                                       char *all_args[]
 );
void lex_example_check_monovalent_proof_sym_certificate( int rnd, int arch, int force_perm,
                                                         int force_encoding_param_with_no_password,
                                                         char *all_args[]
 );
void lex_example_make_signature_symmetric( int rnd, int arch, int force_perm,
                                           int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_signature_asymmetric( int rnd, int arch, int force_perm,
                                            int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_ring_signature( int rnd, int arch, int force_perm,
                                      int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_certificate_symmetric( int rnd, int arch, int force_perm,
                                             int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_certificate_asymmetric( int rnd, int arch, int force_perm,
                                              int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_signature_symmetric( int rnd, int arch, int force_perm,
                                            int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_signature_asymmetric( int rnd, int arch, int force_perm,
                                             int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_ring_signature( int rnd, int arch, int force_perm,
                                       int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_certificate_symmetric( int rnd, int arch, int force_perm,
                                              int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_certificate_asymmetric( int rnd, int arch, int force_perm,
                                               int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_make_hash( int rnd, int arch, int force_perm, int force_encoding_param_with_no_password,
                            char *all_args[]
 );
void lex_example_make_checksum( int rnd, int arch, int force_perm,
                                int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_check_checksum( int rnd, int arch, int force_perm,
                                 int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_check_hash( int rnd, int arch, int force_perm, int force_encoding_param_with_no_password,
                             char *all_args[]
 );
void lex_example_convert_hash_to_point( int rnd, int arch, int force_perm,
                                        int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_convert_point_to_monomial_key( int rnd, int arch, int force_perm,
                                                int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_convert_monomial_key_to_point( int rnd, int arch, int force_perm,
                                                int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_convert_binomial_key_to_start_point( int rnd, int arch, int force_perm,
                                                      int force_encoding_param_with_no_password,
                                                      char *all_args[]
 );
void lex_example_convert_start_point_to_point( int rnd, int arch, int force_perm,
                                               int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_convert_point_to_start_point( int rnd, int arch, int force_perm,
                                               int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_convert_monomial_key_to_monomial_commitment( int rnd, int arch, int force_perm,
                                                              int force_encoding_param_with_no_password,
                                                              char *all_args[]
 );
void lex_example_convert_monomial_commitment_to_monomial_key( int rnd, int arch, int force_perm,
                                                              int force_encoding_param_with_no_password,
                                                              char *all_args[]
 );
void lex_example_split_symmetric( int rnd, int arch, int force_perm,
                                  int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_encrypt_asymmetric( int rnd, int arch, int force_perm,
                                     int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_encrypt_symmetric( int rnd, int arch, int force_perm,
                                    int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_join_symmetric( int rnd, int arch, int force_perm, int force_encoding_param_with_no_password,
                                 char *all_args[]
 );
void lex_example_decipher_asymmetric( int rnd, int arch, int force_perm,
                                      int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_decipher_symmetric( int rnd, int arch, int force_perm,
                                     int force_encoding_param_with_no_password, char *all_args[]
 );
void lex_example_check_complete_blocks( int rnd, int arch, int force_perm,
                                        int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_make_block( int rnd, int arch, int force_perm, int neutral_standard_alice_bob,
                             char *all_args[]
 );
void lex_example_merge_block( int rnd, int arch, int force_perm,
                              int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_strip_header_from_block( int rnd, int arch, int force_perm,
                                          int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_print_header( int rnd, int arch, int force_perm,
                               int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_print_lib_info( int rnd, int arch, int force_perm,
                                 int neutral_standard_alice_bob, char *all_args[]
 );

void lex_example_convert_symmetric_certificate_to_monovalent_key( int rnd, int arch, int force_perm,
                                                                  int
                                                                  neutral_standard_alice_bob, char *all_args[]
 );

void lex_example_convert_asymmetric_certificate_to_binomial_key( int rnd, int arch, int force_perm,
                                                                 int
                                                                 neutral_standard_alice_bob, char *all_args[]
 );

void lex_example_convert_hash_to_monomial_key( int rnd, int arch, int force_perm,
                                               int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_get_capacity( int rnd, int arch, int force_perm,
                               int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_make_steganography_block( int rnd, int arch, int force_perm, int neutral_standard_alice_bob,
                                           char *all_args[]
 );
void lex_example_extract_steganography_block( int rnd, int arch, int force_perm,
                                              int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_make_steganography_raw( int rnd, int arch, int force_perm, int neutral_standard_alice_bob,
                                         char *all_args[]
 );
void lex_example_extract_steganography_raw( int rnd, int arch, int force_perm,
                                            int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_convert_asymmetric_signature_to_binomial_key( int rnd, int arch, int force_perm,
                                                               int neutral_standard_alice_bob,
                                                               char *all_args[]
 );
void lex_example_convert_symmetric_signature_to_binomial_key( int rnd, int arch, int force_perm,
                                                              int neutral_standard_alice_bob, char *all_args[]
 );
void lex_example_convert_binomial_key_to_asymmetric_signature( int rnd, int arch, int force_perm,
                                                               int neutral_standard_alice_bob,
                                                               char *all_args[]
 );
void lex_example_convert_binomial_key_to_symmetric_signature( int rnd, int arch, int force_perm,
                                                              int neutral_standard_alice_bob, char *all_args[]
 );

#endif
